/* 定义用户相关信息的仓库 */
// 引入定义仓库的方法
import { defineStore } from "pinia";
// 引入用户信息接口
import { reqUserLogin } from "@/api/user";
// 引入用户信息返回数据的类型
import { LoginData, UserInfoData, UserInfo } from "@/api/user/type";
// 引入仓库数据的类型
import { UserType } from "./interface";
// 引入本地数据的方法
import { GET_LOCAL, SET_LOCAL, REMOVE_LOCAL } from "@/utils/user";

// 定义一个常量
const USERINFO = "USERINFO"

// 定义一个仓库
const useUserStore = defineStore("User", {
    state: (): UserType => ({
        // 登录组件的状态标识，true 显示
        visiable: false,
        // 存储用户数据
        userInfo: (GET_LOCAL(USERINFO) || {}) as UserInfo,
    }),
    actions: {
        // 手机号码登陆的请求
        async sendLoginParam(data: LoginData) {
            let result: UserInfoData = await reqUserLogin(data);
            if (result.code === 200) {
                // 将数据存储在 User 中
                this.userInfo = result.data
                // 本地存储持久化存储用户信息
                SET_LOCAL(USERINFO, this.userInfo)
                // 返回一个成功的 Promise
                return "ok"
            } else {
                return Promise.reject(new Error(result.message))
            }
        },
        // 退出登陆的方法
        logOut() {
            // 清除用户信息
            this.userInfo = {} as UserInfo
            // 清除本地用户信息
            REMOVE_LOCAL(USERINFO)
        },
        // 查询微信扫码的结果
        queryState() {
            // 开启定时器，每隔一段时间查询本地存储是否有数据
            let timer = setInterval(() => {
                // 本地有数据说明扫码成功
                if (GET_LOCAL(USERINFO)) {
                    // 关闭用户登录提示框
                    this.visiable = false;
                    // 将存储在本地的用户信息存储在仓库中
                    this.userInfo = (GET_LOCAL(USERINFO) || {}) as UserInfo
                    clearInterval(timer)
                }
            }, 1000)
        }
    },
    getters: {

    }
})

// 默认暴露
export default useUserStore